<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test upload test</title>
    <style>
        #sign_in{
            float: left;
            margin-top: 30px;
        }
        #sign_out{
            float: left;
            margin-left: 100px ;
            margin-top: 30px;
        }
        #kuang{
            width: 700px;
            height: 100px;
            /* margin: auto; */
        }
    </style>
</head>
<body>
<form action="" method="post">   
    <fieldset id="kuang">    
    <div id="sign_in">签到人名：<input type="text" name="uname">
    <input type="submit" value="签到" name="sign">
    </div>

    <div id="sign_out">签退人名：<input type="text" name="oname">
    <input type="submit" value="签退" name="out">
    </div>
</fieldset> 
</form>
    
</body>
</html>


<?php
//复习时注意
//似乎有更简单的算法，就是一进来用explode来把信息存进数组，然后把数组 暂缓，继续当前
//bug1：就是我多人签到之后再签退，然后再多人签到，会有算法逻辑错误：由于没有'/'分割，两个元素合成了一个元素
//bug1：解决：在签退的时候添加一个$hit=1,让下次多个签到判断的时候能够执行hit=1的语句
//多人签退其实逻辑是一样的，但是时间有限，我不愿再花更多的时间来做那个功能，但是掌握知识，足以
$count=0;
$names='';
$hit=0;//hit只是因为我有强迫症，在测试的时候输出了:我/打/你/ 但是我想要的是:我/打/你，为了去掉你字后面的'/'，写了hit相关代码  ×完全复杂化了算法

if($_POST['sign']){  
    if(empty($_POST['uname']))    //bug2：在于如果我提交的签到人是空怎么办,count在长           √解决
        die('不能为空');
    $nameArr=explode('/',$_COOKIE['names']);
    if(in_array($_POST['uname'],$nameArr)){
        die('请不要重复签到');
    }
    //此处加一个循环判断post传输的数据是否在已经有的名字中存在
    if(strpos($_POST['uname'],'/')){      //如果里面有这个字符，就代表本次提交是多人签到
        $nameTest=explode('/',$_POST['uname']);
        foreach($nameArr as $k=>$v){
            foreach($nameTest as $k2 =>$v2){
                if($v2==$v){//多个签到情况，如果两个数组里面有相同的值，推出，不能重复签到
                    die('请不要重复签到');//删除这个位置上的元素并重置索引值
                }
            }
        }
        $number=count($nameTest);
        $count=$_COOKIE['count']+$number;
        $hit=$_COOKIE['hit']+1;    
        echo "目前签到人数：$count<br>";
        echo "<hr>";
        $names=$_COOKIE['names'];  //思想是把之前存储的全部赋给names，然后字符串把本次的连接然后输出
        if($hit==1){// 这里的模块就是为了美化那个不完美，不过时间关系，暂缓                 已完成√
            foreach($nameTest as $k=>$v){
                ($k==0)?$names=$v."$names":$names=$v."/$names";//第一次，就给names赋值前面不要'/'
            }
        }
        else{
            foreach($nameTest as $k=>$v){
                $names=$v."/$names";//第一次，就给names赋值前面不要'/'
            }
        }
        echo "已经签到的人有：".$names;
    }
    else{  //单人签到
        $hit=$_COOKIE['hit']+1;
        $count=$_COOKIE['count']+1;   
        echo "目前签到人数：$count<br>";
        echo "<hr>";
        $names=$_COOKIE['names'];
        // $test=$_POST['uname'];   //解决写成函数的问题，就是把变量转换参数的思想
        ($count==1)?$names=$_POST['uname']."$names":$names=$_POST['uname']."/$names";
        echo "已经签到的人有：$names";
    }
}

if($_POST['out']){
    if(empty($_POST['oname'])) 
        die('不能为空');
    $nameArr=explode('/',$_COOKIE['names']);
    if(!in_array($_POST['oname'],$nameArr)){
        die('您暂时没签到或者已经签退'); //实现更复杂的功能，就要创建更多的cookie来存储它的签退总记录
    }

    //如果要做最后的多人签退，在这里动，+if，大逻辑和签到差不多

    $hit=1;//这里出现的bug，解决是在上方                                                      已经解决√
    $count=$_COOKIE['count']-1;   
    echo "目前签到人数：$count<br>";
    echo "<hr>";
    foreach($nameArr as $k=>$v){
        if($_POST['oname']==$v){
            array_splice($nameArr, $k, 1);//删除这个位置上的元素并重置索引值
        }
    }
    $names=implode("/",$nameArr);
    // $test=$_POST['uname'];   //解决写成函数的问题，就是把变量转换参数的思想
    // ($count==1)?$names=$_POST['uname']."$names":$names=$_POST['uname']."/$names";
    echo "已经签到的人有：$names";
}

setcookie("names",$names);  //把本次保存好的数据上传给cookie方便下一次使用
setcookie("count",$count);
setcookie("hit",$hit);
?>